{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "\n",
    "sys.path.append('../..')\n",
    "import torchdyn; from torchdyn.models import *; from torchdyn.datasets import *\n",
    "from pytorch_lightning.loggers import WandbLogger"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7f7bbd0e4e90>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 216x216 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "data = ToyDataset()\n",
    "n_samples = 1 << 16\n",
    "n_gaussians = 7\n",
    "\n",
    "X, yn = data.generate(n_samples // n_gaussians, 'gaussians_spiral', n_gaussians=32, n_gaussians_per_loop=10, std_gaussians_start=0.5, std_gaussians_end=0.01, \n",
    "                      dim=2, radius_start=20, radius_end=0.1)\n",
    "X = (X - X.mean())/X.std()\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "plt.figure(figsize=(3, 3))\n",
    "plt.scatter(X[:,0], X[:,1], c='orange', alpha=0.3, s=4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.utils.data as data\n",
    "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n",
    "X_train = torch.Tensor(X).to(device)\n",
    "y_train = torch.LongTensor(yn).long().to(device)\n",
    "train = data.TensorDataset(X_train, y_train)\n",
    "trainloader = data.DataLoader(train, batch_size=512, shuffle=True) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "\n",
    "def autograd_trace(x_out, x_in, **kwargs):\n",
    "    \"\"\"Standard brute-force means of obtaining trace of the Jacobian, O(d) calls to autograd\"\"\"\n",
    "    trJ = 0.\n",
    "    for i in range(x_in.shape[1]):\n",
    "        trJ += torch.autograd.grad(x_out[:, i].sum(), x_in, allow_unused=False, create_graph=True)[0][:, i]  \n",
    "    return trJ\n",
    "\n",
    "def hutch_trace(x_out, x_in, noise=None, **kwargs):\n",
    "    \"\"\"Hutchinson's trace Jacobian estimator, O(1) call to autograd\"\"\"\n",
    "    jvp = torch.autograd.grad(x_out, x_in, noise, create_graph=True)[0]\n",
    "    trJ = torch.einsum('bi,bi->b', jvp, noise)\n",
    "    \n",
    "    return trJ\n",
    "\n",
    "REQUIRES_NOISE = [hutch_trace]\n",
    "\n",
    "class CNF(nn.Module):\n",
    "    def __init__(self, net, trace_estimator=None, noise_dist=None, order=1):\n",
    "        super().__init__()\n",
    "        self.net, self.order = net, order # order at the CNF level will be merged with DEFunc\n",
    "        self.trace_estimator = trace_estimator if trace_estimator is not None else autograd_trace;\n",
    "        self.noise_dist, self.noise = noise_dist, None\n",
    "        if self.trace_estimator in REQUIRES_NOISE:\n",
    "            assert self.noise_dist is not None, 'This type of trace estimator requires specification of a noise distribution'\n",
    "            \n",
    "    def forward(self, x):   \n",
    "        with torch.set_grad_enabled(True):\n",
    "            x_in = torch.autograd.Variable(x[:,1:], requires_grad=True).to(x) # first dimension reserved to divergence propagation\n",
    "            \n",
    "            # the neural network will handle the data-dynamics here\n",
    "            if self.order > 1: x_out = self.higher_order(x_in)\n",
    "            else: x_out = self.net(x_in)\n",
    "                \n",
    "            trJ = self.trace_estimator(x_out, x_in, noise=self.noise)\n",
    "        return torch.cat([-trJ[:, None], x_out], 1) + 0*x # `+ 0*x` has the only purpose of connecting x[:, 0] to autograd graph\n",
    "    \n",
    "    def higher_order(self, x):\n",
    "        # NOTE: higher-order in CNF is handled at the CNF level, to refactor\n",
    "        x_new = []\n",
    "        size_order = x.size(1) // self.order\n",
    "        for i in range(1, self.order):\n",
    "            x_new += [x[:, size_order*i:size_order*(i+1)]]\n",
    "        x_new += [self.net(x)]\n",
    "        return torch.cat(x_new, 1).to(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "from torch.distributions import MultivariateNormal, Uniform, TransformedDistribution, SigmoidTransform, Categorical\n",
    "prior = MultivariateNormal(torch.zeros(2).to(device), 2*torch.eye(2).to(device))\n",
    "\n",
    "ndes = []\n",
    "for i in range(1):\n",
    "    \n",
    "    f = nn.Sequential(\n",
    "            nn.Linear(2, 64),\n",
    "            nn.Softplus(),\n",
    "            nn.Linear(64, 64),\n",
    "            nn.Softplus(),\n",
    "            nn.Linear(64, 64),\n",
    "            nn.Softplus(),\n",
    "            nn.Linear(64, 64),\n",
    "            nn.Softplus(),\n",
    "            nn.Linear(64, 64),\n",
    "            nn.Softplus(),\n",
    "            nn.Linear(64, 64),\n",
    "            nn.Softplus(),\n",
    "            nn.Linear(64, 64),\n",
    "            nn.Softplus(),\n",
    "            nn.Linear(64, 2),\n",
    "        \n",
    "        )\n",
    "\n",
    "    \n",
    "    cnf = CNF(f, order=1) # for CNFs, order is specified here instead of `NeuralDE`\n",
    "    \n",
    "    nde = NeuralDE(cnf, solver='dopri5', s_span=torch.linspace(0, 1, 2), atol=1e-6, rtol=1e-6, sensitivity='adjoint')\n",
    "    ndes.append(nde)\n",
    "\n",
    "\n",
    "model = nn.Sequential(Augmenter(augment_idx=1, augment_dims=1),\n",
    "                      *ndes).to(device)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Learner"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "def cnf_density(model, npts=100, memory= 100):\n",
    "    with torch.no_grad():\n",
    "        side = np.linspace(-2., 2., npts)\n",
    "        xx, yy = np.meshgrid(side, side)\n",
    "        x = np.hstack([xx.reshape(-1, 1), yy.reshape(-1, 1)])\n",
    "        x = torch.from_numpy(x).type(torch.float32).to(device)\n",
    "\n",
    "        z, delta_logp = [], []\n",
    "        inds = torch.arange(0, x.shape[0]).to(torch.int64)\n",
    "        for ii in torch.split(inds, int(memory**2)):\n",
    "            z_full = model(x[ii]).cpu().detach()\n",
    "            z_, delta_logp_ = z_full[:, 1:3], z_full[:, 0]\n",
    "            z.append(z_)\n",
    "            delta_logp.append(delta_logp_)\n",
    "\n",
    "        z = torch.cat(z, 0)\n",
    "        delta_logp = torch.cat(delta_logp, 0)\n",
    "\n",
    "        logpz = prior.log_prob(z.cuda()).cpu() # logp(z)\n",
    "        logpx = logpz - delta_logp\n",
    "        px = np.exp(logpx.cpu().numpy()).reshape(npts, npts)\n",
    "        plt.figure(figsize=(32, 32))\n",
    "        plt.imshow(px);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Learner(pl.LightningModule):\n",
    "    def __init__(self, model:nn.Module):\n",
    "        super().__init__()\n",
    "        self.model = model\n",
    "        self.lr = 3e-3\n",
    "        \n",
    "    def forward(self, x):\n",
    "        return self.model(x)\n",
    "    \n",
    "    def training_step(self, batch, batch_idx):\n",
    "        # plot logging  \n",
    "        if batch_idx % 50 == 0: \n",
    "            plot_samples()\n",
    "            self.logger.experiment.log({\"chart\": plt})\n",
    "            plt.close()\n",
    "            nde.nfe = 0\n",
    "        \n",
    "        x, _ = batch     \n",
    "        xtrJ = self.model(x)  \n",
    "        logprob = prior.log_prob(xtrJ[:,1:3]).to(x) - xtrJ[:,0] \n",
    "        loss = -torch.mean(logprob)\n",
    "        \n",
    "        nfe = nde.nfe\n",
    "        nde.nfe = 0\n",
    "        \n",
    "        metrics = {'loss': loss, 'nfe':nfe}\n",
    "        self.logger.experiment.log(metrics) \n",
    "        return {'loss': loss}   \n",
    "    \n",
    "    def configure_optimizers(self):\n",
    "        return torch.optim.AdamW(self.model.parameters(), lr=self.lr, weight_decay=1e-5)\n",
    "\n",
    "    def train_dataloader(self):\n",
    "        self.loader_l = len(trainloader)\n",
    "        return trainloader"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "GPU available: True, used: True\n",
      "TPU available: False, using: 0 TPU cores\n",
      "CUDA_VISIBLE_DEVICES: [0]\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "\n",
       "                Logging results to <a href=\"https://wandb.com\" target=\"_blank\">Weights & Biases</a> <a href=\"https://docs.wandb.com/integrations/jupyter.html\" target=\"_blank\">(Documentation)</a>.<br/>\n",
       "                Project page: <a href=\"https://app.wandb.ai/zymrael/torchdyn-toy_cnf-bench-spiral\" target=\"_blank\">https://app.wandb.ai/zymrael/torchdyn-toy_cnf-bench-spiral</a><br/>\n",
       "                Run page: <a href=\"https://app.wandb.ai/zymrael/torchdyn-toy_cnf-bench-spiral/runs/2tocb24b\" target=\"_blank\">https://app.wandb.ai/zymrael/torchdyn-toy_cnf-bench-spiral/runs/2tocb24b</a><br/>\n",
       "            "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\u001b[34m\u001b[1mwandb\u001b[0m: Wandb version 0.9.2 is available!  To upgrade, please run:\n",
      "\u001b[34m\u001b[1mwandb\u001b[0m:  $ pip install wandb --upgrade\n",
      "\n",
      "  | Name  | Type       | Params\n",
      "-------------------------------------\n",
      "0 | model | Sequential | 25 K  \n",
      "/home/jyp/michael_dev/testenv/lib/python3.7/site-packages/pytorch_lightning/utilities/distributed.py:25: UserWarning:\n",
      "\n",
      "The dataloader, train dataloader, does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` (try 20 which is the number of cpus on this machine) in the `DataLoader` init to improve performance.\n",
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6c237dee11bd42d0b52072d8efe0f3e7",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', description='Training', layout=Layout(flex='2'), max…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jyp/michael_dev/testenv/lib/python3.7/site-packages/plotly/matplotlylib/mpltools.py:368: MatplotlibDeprecationWarning:\n",
      "\n",
      "\n",
      "The is_frame_like function was deprecated in Matplotlib 3.1 and will be removed in 3.3.\n",
      "\n",
      "/home/jyp/michael_dev/testenv/lib/python3.7/site-packages/pytorch_lightning/utilities/distributed.py:25: UserWarning:\n",
      "\n",
      "Detected KeyboardInterrupt, attempting graceful shutdown...\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "logger = WandbLogger(project='torchdyn-toy_cnf-bench-spiral')\n",
    "learn = Learner(model)\n",
    "trainer = pl.Trainer(min_steps=45000, max_steps=45000, gpus=1, logger=logger)\n",
    "trainer.fit(learn);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "ename": "RuntimeError",
     "evalue": "CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 11.91 GiB total capacity; 147.48 MiB already allocated; 14.56 MiB free; 194.00 MiB reserved in total by PyTorch) (malloc at /pytorch/c10/cuda/CUDACachingAllocator.cpp:289)\nframe #0: c10::Error::Error(c10::SourceLocation, std::string const&) + 0x46 (0x7f7c381d5536 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libc10.so)\nframe #1: <unknown function> + 0x1cf1e (0x7f7c3841ef1e in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libc10_cuda.so)\nframe #2: <unknown function> + 0x1df9e (0x7f7c3841ff9e in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libc10_cuda.so)\nframe #3: at::native::empty_cuda(c10::ArrayRef<long>, c10::TensorOptions const&, c10::optional<c10::MemoryFormat>) + 0x135 (0x7f7be375c535 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cuda.so)\nframe #4: <unknown function> + 0xf7a66b (0x7f7be1d5466b in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cuda.so)\nframe #5: <unknown function> + 0xfc3f57 (0x7f7be1d9df57 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cuda.so)\nframe #6: <unknown function> + 0x1075389 (0x7f7c1e2d9389 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #7: <unknown function> + 0x10756c7 (0x7f7c1e2d96c7 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #8: <unknown function> + 0xe3c42e (0x7f7c1e0a042e in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #9: at::TensorIterator::fast_set_up() + 0x5cf (0x7f7c1e0a12af in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #10: at::TensorIterator::build() + 0x4c (0x7f7c1e0a1b6c in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #11: at::TensorIterator::binary_op(at::Tensor&, at::Tensor const&, at::Tensor const&, bool) + 0x146 (0x7f7c1e0a2216 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #12: at::native::softplus_backward(at::Tensor const&, at::Tensor const&, c10::Scalar, c10::Scalar, at::Tensor const&) + 0x37 (0x7f7c1dd5a667 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #13: <unknown function> + 0x117e067 (0x7f7c1e3e2067 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #14: <unknown function> + 0x1189a6e (0x7f7c1e3eda6e in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #15: <unknown function> + 0x2c086ef (0x7f7c1fe6c6ef in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #16: <unknown function> + 0x1189a6e (0x7f7c1e3eda6e in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #17: torch::autograd::generated::SoftplusBackward::apply(std::vector<at::Tensor, std::allocator<at::Tensor> >&&) + 0x306 (0x7f7c1fb154a6 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #18: <unknown function> + 0x2d89c05 (0x7f7c1ffedc05 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #19: torch::autograd::Engine::evaluate_function(std::shared_ptr<torch::autograd::GraphTask>&, torch::autograd::Node*, torch::autograd::InputBuffer&) + 0x16f3 (0x7f7c1ffeaf03 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #20: torch::autograd::Engine::thread_main(std::shared_ptr<torch::autograd::GraphTask> const&, bool) + 0x3d2 (0x7f7c1ffebce2 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #21: torch::autograd::Engine::thread_init(int) + 0x39 (0x7f7c1ffe4359 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #22: torch::autograd::python::PythonEngine::thread_init(int) + 0x38 (0x7f7c38d54998 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_python.so)\nframe #23: <unknown function> + 0xee0f (0x7f7c39942e0f in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/_C.cpython-37m-x86_64-linux-gnu.so)\nframe #24: <unknown function> + 0x76ba (0x7f7c52afb6ba in /lib/x86_64-linux-gnu/libpthread.so.0)\nframe #25: clone + 0x6d (0x7f7c51cde41d in /lib/x86_64-linux-gnu/libc.so.6)\n",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mRuntimeError\u001b[0m                              Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-16-9776dfbb82f3>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0;31m# integrating from 1 to 0, 8 steps of rk4\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0ms_span\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlinspace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mnew_x\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msample\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcpu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdetach\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m~/michael_dev/testenv/lib/python3.7/site-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m    548\u001b[0m             \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_slow_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    549\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 550\u001b[0;31m             \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    551\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0mhook\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_forward_hooks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    552\u001b[0m             \u001b[0mhook_result\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/michael_dev/testenv/lib/python3.7/site-packages/torch/nn/modules/container.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, input)\u001b[0m\n\u001b[1;32m     98\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     99\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0mmodule\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 100\u001b[0;31m             \u001b[0minput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    101\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    102\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/michael_dev/testenv/lib/python3.7/site-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m    548\u001b[0m             \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_slow_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    549\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 550\u001b[0;31m             \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    551\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0mhook\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_forward_hooks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    552\u001b[0m             \u001b[0mhook_result\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/michael_dev/torchdyn/torchdyn/models/neuralde.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, x)\u001b[0m\n\u001b[1;32m     65\u001b[0m         }\n\u001b[1;32m     66\u001b[0m         \u001b[0modeint\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mswitcher\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msensitivity\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 67\u001b[0;31m         \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0modeint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     68\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     69\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/michael_dev/torchdyn/torchdyn/models/neuralde.py\u001b[0m in \u001b[0;36m_adjoint\u001b[0;34m(self, x)\u001b[0m\n\u001b[1;32m     99\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    100\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m_adjoint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 101\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madjoint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdefunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0ms_span\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrtol\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrtol\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0matol\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0matol\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msolver\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    102\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    103\u001b[0m     \u001b[0;34m@\u001b[0m\u001b[0mproperty\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/michael_dev/testenv/lib/python3.7/site-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m    548\u001b[0m             \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_slow_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    549\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 550\u001b[0;31m             \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    551\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0mhook\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_forward_hooks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    552\u001b[0m             \u001b[0mhook_result\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/michael_dev/torchdyn/torchdyn/sensitivity/adjoint.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, func, h0, s_span, rtol, atol, method, options)\u001b[0m\n\u001b[1;32m     82\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0matol\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrtol\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0matol\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrtol\u001b[0m \u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     83\u001b[0m         \u001b[0mh0\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mh0\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrequires_grad_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 84\u001b[0;31m         \u001b[0msol\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mautograd_func\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mh0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mflat_params\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0ms_span\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     85\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0msol\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     86\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/michael_dev/torchdyn/torchdyn/sensitivity/adjoint.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(ctx, h0, flat_params, s_span)\u001b[0m\n\u001b[1;32m     59\u001b[0m             \u001b[0;32mdef\u001b[0m \u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mctx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mh0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mflat_params\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ms_span\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     60\u001b[0m                 sol = odeint(self.func, h0, self.s_span, rtol=self.rtol, atol=self.atol, \n\u001b[0;32m---> 61\u001b[0;31m                              method=self.method, options=self.options)\n\u001b[0m\u001b[1;32m     62\u001b[0m                 \u001b[0mctx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msave_for_backward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0ms_span\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mflat_params\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msol\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     63\u001b[0m                 \u001b[0;32mreturn\u001b[0m \u001b[0msol\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/michael_dev/testenv/lib/python3.7/site-packages/torchdiffeq/_impl/odeint.py\u001b[0m in \u001b[0;36modeint\u001b[0;34m(func, y0, t, rtol, atol, method, options)\u001b[0m\n\u001b[1;32m     74\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     75\u001b[0m     \u001b[0msolver\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mSOLVERS\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrtol\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrtol\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0matol\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0matol\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0moptions\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 76\u001b[0;31m     \u001b[0msolution\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msolver\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mintegrate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     77\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     78\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mtensor_input\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/michael_dev/testenv/lib/python3.7/site-packages/torchdiffeq/_impl/solvers.py\u001b[0m in \u001b[0;36mintegrate\u001b[0;34m(self, t)\u001b[0m\n\u001b[1;32m     27\u001b[0m         \u001b[0msolution\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0my0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     28\u001b[0m         \u001b[0mt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0my0\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfloat64\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 29\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbefore_integrate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     30\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     31\u001b[0m             \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madvance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/michael_dev/testenv/lib/python3.7/site-packages/torchdiffeq/_impl/dopri5.py\u001b[0m in \u001b[0;36mbefore_integrate\u001b[0;34m(self, t)\u001b[0m\n\u001b[1;32m     76\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     77\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mbefore_integrate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 78\u001b[0;31m         \u001b[0mf0\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtype_as\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0my0\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0my0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     79\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfirst_step\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     80\u001b[0m             \u001b[0mfirst_step\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_select_initial_step\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0my0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrtol\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0matol\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf0\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mf0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/michael_dev/testenv/lib/python3.7/site-packages/torchdiffeq/_impl/misc.py\u001b[0m in \u001b[0;36m<lambda>\u001b[0;34m(t, y)\u001b[0m\n\u001b[1;32m    185\u001b[0m         \u001b[0mt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m-\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    186\u001b[0m         \u001b[0m_base_reverse_func\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 187\u001b[0;31m         \u001b[0mfunc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mlambda\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mtuple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mf_\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mf_\u001b[0m \u001b[0;32min\u001b[0m \u001b[0m_base_reverse_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    188\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    189\u001b[0m     \u001b[0;32mfor\u001b[0m \u001b[0my0_\u001b[0m \u001b[0;32min\u001b[0m \u001b[0my0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/michael_dev/testenv/lib/python3.7/site-packages/torchdiffeq/_impl/misc.py\u001b[0m in \u001b[0;36m<lambda>\u001b[0;34m(t, y)\u001b[0m\n\u001b[1;32m    177\u001b[0m         \u001b[0my0\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0my0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    178\u001b[0m         \u001b[0m_base_nontuple_func_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 179\u001b[0;31m         \u001b[0mfunc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mlambda\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0m_base_nontuple_func_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    180\u001b[0m     \u001b[0;32massert\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtuple\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'y0 must be either a torch.Tensor or a tuple'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    181\u001b[0m     \u001b[0;32mfor\u001b[0m \u001b[0my0_\u001b[0m \u001b[0;32min\u001b[0m \u001b[0my0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/michael_dev/testenv/lib/python3.7/site-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m    548\u001b[0m             \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_slow_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    549\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 550\u001b[0;31m             \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    551\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0mhook\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_forward_hooks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    552\u001b[0m             \u001b[0mhook_result\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/michael_dev/torchdyn/torchdyn/models/defunc.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, s, x)\u001b[0m\n\u001b[1;32m     36\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     37\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0morder\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhorder_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ms\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 38\u001b[0;31m             \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     39\u001b[0m             \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdxds\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     40\u001b[0m             \u001b[0;32mreturn\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/michael_dev/testenv/lib/python3.7/site-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m    548\u001b[0m             \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_slow_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    549\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 550\u001b[0;31m             \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    551\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0mhook\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_forward_hooks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    552\u001b[0m             \u001b[0mhook_result\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-4-5118bbdd790e>\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, x)\u001b[0m\n\u001b[1;32m     35\u001b[0m             \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mx_out\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnet\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_in\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     36\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 37\u001b[0;31m             \u001b[0mtrJ\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtrace_estimator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_out\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx_in\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnoise\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnoise\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     38\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mtrJ\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx_out\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mx\u001b[0m \u001b[0;31m# `+ 0*x` has the only purpose of connecting x[:, 0] to autograd graph\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     39\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-4-5118bbdd790e>\u001b[0m in \u001b[0;36mautograd_trace\u001b[0;34m(x_out, x_in, **kwargs)\u001b[0m\n\u001b[1;32m      6\u001b[0m     \u001b[0mtrJ\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m     \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_in\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m         \u001b[0mtrJ\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mautograd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgrad\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_out\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx_in\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mallow_unused\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcreate_graph\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      9\u001b[0m     \u001b[0;32mreturn\u001b[0m \u001b[0mtrJ\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     10\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/michael_dev/testenv/lib/python3.7/site-packages/torch/autograd/__init__.py\u001b[0m in \u001b[0;36mgrad\u001b[0;34m(outputs, inputs, grad_outputs, retain_graph, create_graph, only_inputs, allow_unused)\u001b[0m\n\u001b[1;32m    156\u001b[0m     return Variable._execution_engine.run_backward(\n\u001b[1;32m    157\u001b[0m         \u001b[0moutputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgrad_outputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mretain_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcreate_graph\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 158\u001b[0;31m         inputs, allow_unused)\n\u001b[0m\u001b[1;32m    159\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    160\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mRuntimeError\u001b[0m: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 11.91 GiB total capacity; 147.48 MiB already allocated; 14.56 MiB free; 194.00 MiB reserved in total by PyTorch) (malloc at /pytorch/c10/cuda/CUDACachingAllocator.cpp:289)\nframe #0: c10::Error::Error(c10::SourceLocation, std::string const&) + 0x46 (0x7f7c381d5536 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libc10.so)\nframe #1: <unknown function> + 0x1cf1e (0x7f7c3841ef1e in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libc10_cuda.so)\nframe #2: <unknown function> + 0x1df9e (0x7f7c3841ff9e in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libc10_cuda.so)\nframe #3: at::native::empty_cuda(c10::ArrayRef<long>, c10::TensorOptions const&, c10::optional<c10::MemoryFormat>) + 0x135 (0x7f7be375c535 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cuda.so)\nframe #4: <unknown function> + 0xf7a66b (0x7f7be1d5466b in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cuda.so)\nframe #5: <unknown function> + 0xfc3f57 (0x7f7be1d9df57 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cuda.so)\nframe #6: <unknown function> + 0x1075389 (0x7f7c1e2d9389 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #7: <unknown function> + 0x10756c7 (0x7f7c1e2d96c7 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #8: <unknown function> + 0xe3c42e (0x7f7c1e0a042e in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #9: at::TensorIterator::fast_set_up() + 0x5cf (0x7f7c1e0a12af in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #10: at::TensorIterator::build() + 0x4c (0x7f7c1e0a1b6c in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #11: at::TensorIterator::binary_op(at::Tensor&, at::Tensor const&, at::Tensor const&, bool) + 0x146 (0x7f7c1e0a2216 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #12: at::native::softplus_backward(at::Tensor const&, at::Tensor const&, c10::Scalar, c10::Scalar, at::Tensor const&) + 0x37 (0x7f7c1dd5a667 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #13: <unknown function> + 0x117e067 (0x7f7c1e3e2067 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #14: <unknown function> + 0x1189a6e (0x7f7c1e3eda6e in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #15: <unknown function> + 0x2c086ef (0x7f7c1fe6c6ef in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #16: <unknown function> + 0x1189a6e (0x7f7c1e3eda6e in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #17: torch::autograd::generated::SoftplusBackward::apply(std::vector<at::Tensor, std::allocator<at::Tensor> >&&) + 0x306 (0x7f7c1fb154a6 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #18: <unknown function> + 0x2d89c05 (0x7f7c1ffedc05 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #19: torch::autograd::Engine::evaluate_function(std::shared_ptr<torch::autograd::GraphTask>&, torch::autograd::Node*, torch::autograd::InputBuffer&) + 0x16f3 (0x7f7c1ffeaf03 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #20: torch::autograd::Engine::thread_main(std::shared_ptr<torch::autograd::GraphTask> const&, bool) + 0x3d2 (0x7f7c1ffebce2 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #21: torch::autograd::Engine::thread_init(int) + 0x39 (0x7f7c1ffe4359 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so)\nframe #22: torch::autograd::python::PythonEngine::thread_init(int) + 0x38 (0x7f7c38d54998 in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/lib/libtorch_python.so)\nframe #23: <unknown function> + 0xee0f (0x7f7c39942e0f in /home/jyp/michael_dev/testenv/lib/python3.7/site-packages/torch/_C.cpython-37m-x86_64-linux-gnu.so)\nframe #24: <unknown function> + 0x76ba (0x7f7c52afb6ba in /lib/x86_64-linux-gnu/libpthread.so.0)\nframe #25: clone + 0x6d (0x7f7c51cde41d in /lib/x86_64-linux-gnu/libc.so.6)\n"
     ]
    }
   ],
   "source": [
    "sample = prior.sample(torch.Size([1<<15]))\n",
    "# integrating from 1 to 0, 8 steps of rk4\n",
    "model[1].s_span = torch.linspace(1, 0, 2)\n",
    "new_x = model(sample).cpu().detach()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "cnf_density(model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7f062fa51110>"
      ]
     },
     "execution_count": 122,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(12, 4))\n",
    "plt.subplot(121)\n",
    "plt.scatter(new_x[:,1], new_x[:,2], s=0.3, c='blue')\n",
    "#plt.scatter(boh[:,0], boh[:,1], s=0.3, c='black')\n",
    "\n",
    "plt.subplot(122)\n",
    "plt.scatter(X[:,0], X[:,1], s=0.3, c='red')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_samples():\n",
    "    sample = prior.sample(torch.Size([1 << 13]))\n",
    "    # integrating from 1 to 0\n",
    "    model[1].s_span = torch.linspace(1, 0, 2)\n",
    "    new_x = model(sample).cpu().detach()\n",
    "    plt.figure(figsize=(12, 4))\n",
    "    plt.subplot(121)\n",
    "    plt.scatter(new_x[:,1], new_x[:,2], s=2.3, alpha=0.2, linewidths=0.1, c='blue', edgecolors='black')\n",
    "    plt.xlim(-2, 2)\n",
    "    plt.ylim(-2, 2)\n",
    "\n",
    "    plt.subplot(122)\n",
    "    plt.scatter(X[:,0], X[:,1], s=5.3, alpha=0.2, c='red',  linewidths=0.1, edgecolors='black')\n",
    "    plt.xlim(-2, 2)\n",
    "    plt.ylim(-2, 2)\n",
    "    model[1].s_span = torch.linspace(0, 1, 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def cnf_density(model):\n",
    "    with torch.no_grad():\n",
    "        npts = 200\n",
    "        side = np.linspace(-2., 2., npts)\n",
    "        xx, yy = np.meshgrid(side, side)\n",
    "        memory= 100\n",
    "\n",
    "        x = np.hstack([xx.reshape(-1, 1), yy.reshape(-1, 1)])\n",
    "        x = torch.from_numpy(x).type(torch.float32).to(device)\n",
    "\n",
    "        z, delta_logp = [], []\n",
    "        inds = torch.arange(0, x.shape[0]).to(torch.int64)\n",
    "        for ii in torch.split(inds, int(memory**2)):\n",
    "            z_full = model(x[ii]).cpu().detach()\n",
    "            z_, delta_logp_ = z_full[:, 1:], z_full[:, 0]\n",
    "            z.append(z_)\n",
    "            delta_logp.append(delta_logp_)\n",
    "\n",
    "        z = torch.cat(z, 0)\n",
    "        delta_logp = torch.cat(delta_logp, 0)\n",
    "\n",
    "        logpz = prior.log_prob(z.cuda()).cpu() # logp(z)\n",
    "        logpx = logpz - delta_logp\n",
    "        px = np.exp(logpx.cpu().numpy()).reshape(npts, npts)\n",
    "        plt.imshow(px, cmap='inferno', vmax=px.mean());\n",
    "a = cnf_density(model)       "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "py37",
   "language": "python",
   "name": "py37"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
